<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    <script type="text/javascript">
      /**
       * 题干里面的条件太限制咱发挥了，直接当作没看见，现在题目是不限制X的数量，也不限制X的值
       * 老规矩开局先判断一下合法性，不带`.`和数字的直接返回并输出提醒
       * 接着用正则表达式匹配出数组，取短的长度依次比较，在对应下标下的字符串转数字以后新版本大于旧版本返回false，反之true，相等不管
       * 最后判断新数组的长度是否大于旧数组的长度，如果大于就返回true，反之false,刚好也兼顾了旧版本等于新版本应该返回false的情况
       * 小tip：看过前面题的小友应该还记得，牛客判题不能用?.可选链，如果要提交的话去除.?即可
       */
      const _shouldUpdate = (oldVersion, newVersion) => {
        if (oldVersion.indexOf(".") == -1 || newVersion.indexOf(".") == -1) {
          console.log("输入的版本号格式不正确");
          return;
        }
        if (!(oldVersion.match(/\d/)?.[0] && newVersion.match(/\d/)?.[0])) {
          console.log("输入的版本号格式不正确");
          return;
        }

        // 补全代码
        const patter = /(\d+)/g;
        const newVersionNumArr = newVersion.match(patter);
        const oldVersionNumArr = oldVersion.match(patter);
        const shortLength =
          newVersionNumArr.length > oldVersionNumArr.length
            ? oldVersionNumArr.length
            : newVersionNumArr.length;

        for (let i = 0; i < shortLength; i++) {
          if (Number(newVersionNumArr[i]) > Number(oldVersionNumArr[i])) {
            return true;
          } else if (
            Number(newVersionNumArr[i]) < Number(oldVersionNumArr[i])
          ) {
            return false;
          }
        }

        return newVersionNumArr.length > oldVersionNumArr.length;
      };
      console.log(_shouldUpdate(".", "19.0.1")); //输入的版本号格式不正确 undefined
      console.log(_shouldUpdate("19.2.0", "19.2.0.1")); //true
      console.log(_shouldUpdate("19.0.0", "20.0.0")); //true
      console.log(_shouldUpdate("19.18.0", "19.0.1")); //false
      console.log(_shouldUpdate("19.0.0", "19.0.0")); //false
    </script>
  </body>
</html>
